in packages/ketcher-react/src/script/editor/tool/bond.ts [58:144]
mousedown(event) {
if (this.dragCtx) return;
if (isBondingWithMacroMolecule(this.editor, event)) {
return;
}
const struct = this.editor.render.ctab;
const molecule = struct.molecule;
const functionalGroups = molecule.functionalGroups;
const ci = this.editor.findItem(event, [
'atoms',
'bonds',
'functionalGroups',
]);
const atomResult: Array<number> = [];
const bondResult: Array<number> = [];
const result: Array<number> = [];
if (ci && functionalGroups.size && ci.map === 'atoms') {
const atomId = FunctionalGroup.atomsInFunctionalGroup(
functionalGroups,
ci.id,
);
if (atomId !== null) atomResult.push(atomId);
}
if (ci && functionalGroups.size && ci.map === 'bonds') {
const bondId = FunctionalGroup.bondsInFunctionalGroup(
molecule,
functionalGroups,
ci.id,
);
if (bondId !== null) bondResult.push(bondId);
}
if (atomResult.length > 0) {
for (const id of atomResult) {
const fgId = FunctionalGroup.findFunctionalGroupByAtom(
functionalGroups,
id,
);
if (fgId !== null && !result.includes(fgId)) {
result.push(fgId);
}
}
if (result.length) {
this.editor.event.removeFG.dispatch({ fgIds: result });
return;
}
} else if (bondResult.length > 0) {
for (const id of bondResult) {
const fgId = FunctionalGroup.findFunctionalGroupByBond(
molecule,
functionalGroups,
id,
);
if (fgId !== null && !result.includes(fgId)) {
result.push(fgId);
}
}
if (result.length) {
this.editor.event.removeFG.dispatch({ fgIds: result });
return;
}
}
let attachmentAtomId: number | undefined;
if (ci?.map === 'functionalGroups') {
const sgroup = molecule.sgroups.get(ci.id);
attachmentAtomId = sgroup?.getAttachmentAtomId();
}
const rnd = this.editor.render;
this.editor.hover(null);
this.editor.selection(null);
this.dragCtx = {
xy0: rnd.page2obj(event),
item:
attachmentAtomId === undefined
? ci
: {
map: 'atoms',
id: attachmentAtomId,
},
};
if (!this.dragCtx.item)
// ci.type == 'Canvas'
delete this.dragCtx.item;
return true;
}