diff --git a/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts b/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts index b66053de81..8cdcdeaaed 100644 --- a/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts +++ b/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts @@ -480,54 +480,65 @@ export class SequenceMode extends BaseMode { } private get keyboardEventHandlers() { - return { - delete: { - shortcut: ['Backspace', 'Delete'], - handler: () => { - const editor = CoreEditor.provideEditorInstance(); - const previousNode = SequenceRenderer.previousNode; - const previousCaretPosition = SequenceRenderer.caretPosition; - const selections = SequenceRenderer.selections; - const modelChanges = new Command(); - let nodesToDelete: NodesSelection; - - if (selections.length) { - modelChanges.merge(this.deleteSelectedDrawingEntities()); - nodesToDelete = selections; - } else if (previousNode) { - previousNode.monomers.forEach((monomer) => { - modelChanges.merge( - editor.drawingEntitiesManager.deleteMonomer(monomer), - ); - }); - nodesToDelete = [ - [ - { - node: previousNode, - nodeIndexOverall: - SequenceRenderer.previousCaretPosition as number, - }, - ], - ]; - } else { - return; - } + const deleteNode = (direction: 'left' | 'right') => { + const editor = CoreEditor.provideEditorInstance(); + const nodeToDelete = + direction === 'left' + ? SequenceRenderer.previousNode + : SequenceRenderer.getNodeByPointer(SequenceRenderer.caretPosition); + const caretPosition = + direction === 'left' + ? (SequenceRenderer.previousCaretPosition as number) + : SequenceRenderer.caretPosition; + const selections = SequenceRenderer.selections; + const modelChanges = new Command(); + let nodesToDelete: NodesSelection; + + if (selections.length) { + modelChanges.merge(this.deleteSelectedDrawingEntities()); + nodesToDelete = selections; + } else if (nodeToDelete) { + nodeToDelete.monomers.forEach((monomer) => { + modelChanges.merge( + editor.drawingEntitiesManager.deleteMonomer(monomer), + ); + }); + nodesToDelete = [ + [ + { + node: nodeToDelete, + nodeIndexOverall: caretPosition, + }, + ], + ]; + } else { + return; + } - modelChanges.merge(this.handleNodesDeletion(nodesToDelete)); + modelChanges.merge(this.handleNodesDeletion(nodesToDelete)); - this.finishNodesDeletion( - modelChanges, - previousCaretPosition, - nodesToDelete[0][0].nodeIndexOverall, - ); + this.finishNodesDeletion( + modelChanges, + caretPosition, + nodesToDelete[0][0].nodeIndexOverall, + ); - if ( - SequenceRenderer.caretPosition === 0 && - SequenceRenderer.chainsCollection.chains.length === 0 - ) { - this.startNewSequence(); - } - }, + if ( + SequenceRenderer.caretPosition === 0 && + SequenceRenderer.chainsCollection.chains.length === 0 + ) { + this.startNewSequence(); + } + }; + + return { + delete: { + shortcut: ['Delete'], + handler: () => deleteNode('right'), + }, + backspace: { + shortcut: ['Backspace'], + handler: () => deleteNode('left'), }, 'turn-off-edit-mode': { shortcut: ['Escape'],