in packages/ketcher-react/src/script/editor/tool/sgroup.ts [169:268]
mousedown(event) {
const ci = this.editor.findItem(event, searchMaps);
const struct = this.editor.render.ctab;
const sgroups = struct.sgroups;
const molecule = struct.molecule;
const functionalGroups = molecule.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,
);
const atomFromStruct = atomId !== null && struct.atoms.get(atomId)?.a;
if (
atomFromStruct &&
!(
FunctionalGroup.isAtomInContractedFunctionalGroup(
atomFromStruct,
sgroups,
functionalGroups,
true,
) || SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups)
)
) {
atomResult.push(atomId);
}
}
if (ci && functionalGroups.size && ci.map === 'bonds') {
const bondId = FunctionalGroup.bondsInFunctionalGroup(
molecule,
functionalGroups,
ci.id,
);
const bondFromStruct = bondId !== null && struct.bonds.get(bondId)?.b;
if (
bondFromStruct &&
!(
FunctionalGroup.isBondInContractedFunctionalGroup(
bondFromStruct,
sgroups,
functionalGroups,
) || SGroup.isBondInContractedSGroup(bondFromStruct, sgroups)
)
) {
bondResult.push(bondId);
}
}
if (ci && functionalGroups.size && ci.map === 'functionalGroups') {
const sgroup = sgroups.get(ci.id);
if (FunctionalGroup.isFunctionalGroup(sgroup?.item)) {
this.editor.event.removeFG.dispatch({ fgIds: [ci.id] });
return;
}
}
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 > 0) {
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);
}
}
this.editor.event.removeFG.dispatch({ fgIds: result });
return;
}
if (!ci) {
// ci.type == 'Canvas'
this.lassoHelper.begin(event);
}
}