diff --git a/packages/ketcher-core/src/application/editor/Editor.ts b/packages/ketcher-core/src/application/editor/Editor.ts index 643b5d3e84..1fad72be35 100644 --- a/packages/ketcher-core/src/application/editor/Editor.ts +++ b/packages/ketcher-core/src/application/editor/Editor.ts @@ -425,6 +425,16 @@ export class CoreEditor { } private onSelectMonomer(monomer: MonomerItemType) { + if ( + this.mode instanceof SequenceMode && + !this.isSequenceEditMode && + (SequenceRenderer.chainsCollection.length === 0 || + (SequenceRenderer.chainsCollection.length === 1 && + SequenceRenderer.chainsCollection.chains[0]?.isEmpty)) + ) { + this.mode.turnOnEditMode(); + } + if (this.mode instanceof SequenceMode) { this.mode.insertMonomerFromLibrary(monomer); } else { @@ -433,6 +443,16 @@ export class CoreEditor { } private onSelectRNAPreset(preset: IRnaPreset) { + if ( + this.mode instanceof SequenceMode && + !this.isSequenceEditMode && + (SequenceRenderer.chainsCollection.length === 0 || + (SequenceRenderer.chainsCollection.length === 1 && + SequenceRenderer.chainsCollection.chains[0]?.isEmpty)) + ) { + this.mode.turnOnEditMode(); + } + if (this.mode instanceof SequenceMode) { this.mode.insertPresetFromLibrary(preset); } else { diff --git a/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts b/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts index 00a450bb1a..cea729f3e5 100644 --- a/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts +++ b/packages/ketcher-core/src/application/editor/modes/SequenceMode.ts @@ -1410,7 +1410,6 @@ export class SequenceMode extends BaseMode { const history = new EditorHistory(editor); const modelChanges = new Command(); const selections = SequenceRenderer.selections; - const wasCanvasEmptyBeforeInsertion = SequenceRenderer.isEmptyCanvas(); if (selections.length > 0) { if ( @@ -1448,7 +1447,7 @@ export class SequenceMode extends BaseMode { } else { this.replaceSelectionsWithMonomer(selections, monomerItem); } - } else { + } else if (editor.isSequenceEditMode) { const newNodePosition = this.getNewNodePosition(); const newMonomer = editor.drawingEntitiesManager.createMonomer( @@ -1480,14 +1479,11 @@ export class SequenceMode extends BaseMode { modelChanges.addOperation(new ReinitializeModeOperation()); editor.renderersContainer.update(modelChanges); - SequenceRenderer.moveCaretForward(); + SequenceRenderer.setCaretPositionNextToMonomer( + newMonomerSequenceNode.lastMonomerInNode, + ); history.update(modelChanges); } - - if (wasCanvasEmptyBeforeInsertion) { - this.turnOnEditMode(); - SequenceRenderer.moveCaretForward(); - } } private createRnaPresetNode(preset: IRnaPreset, position: Vec2) { @@ -1687,7 +1683,7 @@ export class SequenceMode extends BaseMode { } else { this.replaceSelectionsWithPreset(selections, preset); } - } else { + } else if (editor.isSequenceEditMode) { const newNodePosition = this.getNewNodePosition(); const newPresetNode = this.createRnaPresetNode(preset, newNodePosition); @@ -1713,7 +1709,9 @@ export class SequenceMode extends BaseMode { modelChanges.addOperation(new ReinitializeModeOperation()); editor.renderersContainer.update(modelChanges); - SequenceRenderer.moveCaretForward(); + SequenceRenderer.setCaretPositionNextToMonomer( + newPresetNode.lastMonomerInNode, + ); history.update(modelChanges); } } diff --git a/packages/ketcher-core/src/application/render/renderers/sequence/SequenceRenderer.ts b/packages/ketcher-core/src/application/render/renderers/sequence/SequenceRenderer.ts index 02de9ed942..cac980b739 100644 --- a/packages/ketcher-core/src/application/render/renderers/sequence/SequenceRenderer.ts +++ b/packages/ketcher-core/src/application/render/renderers/sequence/SequenceRenderer.ts @@ -363,7 +363,7 @@ export class SequenceRenderer { let newCaretPosition = -1; SequenceRenderer.forEachNode(({ node, nodeIndexOverall }) => { - if (node.monomer === monomer) { + if (node.monomers.includes(monomer)) { newCaretPosition = nodeIndexOverall; } }); @@ -375,7 +375,7 @@ export class SequenceRenderer { let newCaretPosition = -1; SequenceRenderer.forEachNode(({ node, nodeIndexOverall }) => { - if (node.monomer === monomer) { + if (node.monomers.includes(monomer)) { newCaretPosition = nodeIndexOverall; } }); @@ -925,7 +925,7 @@ export class SequenceRenderer { let rendererToReturn; SequenceRenderer.forEachNode(({ node }) => { - if (node.monomer === monomer) { + if (node.monomers.includes(monomer)) { rendererToReturn = node.renderer; } });