From 6e357c0291de92bce453c959ac9a13908c50f4c0 Mon Sep 17 00:00:00 2001 From: David Luzar Date: Thu, 9 Jul 2020 22:33:27 +0200 Subject: [PATCH] fix deleting multi-point elem during edit (#1892) --- src/actions/actionDeleteSelected.tsx | 66 +++++++++++++--------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/src/actions/actionDeleteSelected.tsx b/src/actions/actionDeleteSelected.tsx index 065c4b49..547b33bc 100644 --- a/src/actions/actionDeleteSelected.tsx +++ b/src/actions/actionDeleteSelected.tsx @@ -52,49 +52,45 @@ function handleGroupEditingState( export const actionDeleteSelected = register({ name: "deleteSelectedElements", perform: (elements, appState) => { - if ( - appState.editingLinearElement?.activePointIndex != null && - appState.editingLinearElement?.activePointIndex > -1 - ) { - const { elementId } = appState.editingLinearElement; + if (appState.editingLinearElement) { + const { elementId, activePointIndex } = appState.editingLinearElement; const element = LinearElementEditor.getElement(elementId); - if (element) { + if (!element) { + return false; + } + if ( + // case: no point selected → delete whole element + activePointIndex == null || + activePointIndex === -1 || // case: deleting last point - if (element.points.length < 2) { - const nextElements = elements.filter((el) => el.id !== element.id); - const nextAppState = handleGroupEditingState(appState, nextElements); - - return { - elements: nextElements, - appState: { - ...nextAppState, - editingLinearElement: null, - }, - commitToHistory: false, - }; - } - - LinearElementEditor.movePoint( - element, - appState.editingLinearElement.activePointIndex, - "delete", - ); + element.points.length < 2 + ) { + const nextElements = elements.filter((el) => el.id !== element.id); + const nextAppState = handleGroupEditingState(appState, nextElements); return { - elements: elements, + elements: nextElements, appState: { - ...appState, - editingLinearElement: { - ...appState.editingLinearElement, - activePointIndex: - appState.editingLinearElement.activePointIndex > 0 - ? appState.editingLinearElement.activePointIndex - 1 - : 0, - }, + ...nextAppState, + editingLinearElement: null, }, - commitToHistory: true, + commitToHistory: false, }; } + + LinearElementEditor.movePoint(element, activePointIndex, "delete"); + + return { + elements: elements, + appState: { + ...appState, + editingLinearElement: { + ...appState.editingLinearElement, + activePointIndex: activePointIndex > 0 ? activePointIndex - 1 : 0, + }, + }, + commitToHistory: true, + }; } let {