diff --git a/packages/ketcher-core/src/application/editor/actions/atom.ts b/packages/ketcher-core/src/application/editor/actions/atom.ts index 8c3310c1c3..c8f70ed374 100644 --- a/packages/ketcher-core/src/application/editor/actions/atom.ts +++ b/packages/ketcher-core/src/application/editor/actions/atom.ts @@ -14,7 +14,7 @@ * limitations under the License. ***************************************************************************/ -import { Atom, Bond, RGroup } from 'domain/entities'; +import { Atom, Bond, RGroup, SGroupAttachmentPoint } from 'domain/entities'; import { AtomAdd, AtomAttr, @@ -38,6 +38,7 @@ import { fromBondStereoUpdate } from './bond'; import { without } from 'lodash/fp'; import ReStruct from 'application/render/restruct/restruct'; import assert from 'assert'; +import { SGroupAttachmentPointRemove } from '../operations/sgroup/sgroupAttachmentPoints'; export function fromAtomAddition(restruct, pos, atom) { atom = Object.assign({}, atom); @@ -223,6 +224,22 @@ export function fromAtomMerge(restruct, srcId, dstId) { if (sgChanged) removeSgroupIfNeeded(action, restruct, [srcId]); + const sgroups = atomGetSGroups(restruct, srcId); + sgroups.forEach((sgroupId: number) => { + const sgroup = restruct.sgroups.get(sgroupId).item; + for (let i = 0; i < sgroup.attachmentPoints.length; ++i) { + if (sgroup.attachmentPoints[i].atomId === srcId) { + action.addOp( + new SGroupAttachmentPointRemove( + sgroupId, + new SGroupAttachmentPoint(srcId, undefined, undefined), + ), + ); + return; + } + } + }); + action.addOp(new AtomDelete(srcId)); const dstAtomNeighbors = restruct.molecule.atomGetNeighbors(dstId); const bond = restruct.molecule.bonds.get( diff --git a/packages/ketcher-core/src/application/editor/actions/utils.ts b/packages/ketcher-core/src/application/editor/actions/utils.ts index 37bc9147ed..1eed281e8c 100644 --- a/packages/ketcher-core/src/application/editor/actions/utils.ts +++ b/packages/ketcher-core/src/application/editor/actions/utils.ts @@ -38,8 +38,8 @@ export function atomGetDegree(restruct, aid) { return restruct.atoms.get(aid).a.neighbors.length; } -export function atomGetSGroups(restruct, aid) { - return Array.from(restruct.atoms.get(aid).a.sgs); +export function atomGetSGroups(restruct, atomId: number): number[] { + return Array.from(restruct.atoms.get(atomId).a.sgs); } export function atomGetPos(restruct, id) {